public class Solution {
    public int minCost(int[][] costs) {

        if(costs==null||costs.length==0){
            return 0;
        }
//动态规划：假设粉刷到i位置，i位置的可能粉刷为dp[i][0],dp[i][1],dp[i][2]
        int n=costs.length;

        int[][]dp = new int[n+1][3];

        for(int i=1;i<=n;i++){

            dp[i][0]=Math.min(dp[i-1][1],dp[i-1][2]) + costs[i-1][0];//注意多加一个下标，找原数组的下标需要-1
            dp[i][1]=Math.min(dp[i-1][0],dp[i-1][2]) + costs[i-1][1];
            dp[i][2]=Math.min(dp[i-1][0],dp[i-1][1]) + costs[i-1][2];

        }
        return Math.min(dp[n][0],Math.min(dp[n][1],dp[n][2]));

    }
}